# -*- coding: utf-8 -*-
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# D7Cl0ud360
# QQ:35350428
# 邮件:35350428@qq.com
# 手机：13584935775
# 作者：'扶程星云'
# 公司网址： http://www.dtcloud360.com/
# Copyright 中亿丰信息科技(苏州)有限公司
# 日期：2021/11/11 15:01
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

import re
from dtcloud.exceptions import UserError, AccessDenied
from ipaddress import IPv4Address
from dtcloud import fields, models, _
from dtcloud.http import request
import logging

_logger = logging.getLogger(__name__)

pattern = r'^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[~!@#$%^&*()_+`\-={}:";\'<>?,.\/\.]).{8,}|(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,}|(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()_+`\-={}:";\'<>?,.\/\.]).{8,}|(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*()_+`\-={}:";\'<>?,.\/\.]).{8,}|(?=.*[A-Z])(?=.*[0-9])(?=.*[~!@#$%^&*()_+`\-={}:";\'<>?,.\/\.]).{8,})$'


class SbompStrongPassword(models.Model):
    _inherit = 'res.users'

    def _change_password(self, new_passwd):
        new_passwd = new_passwd.strip()
        if not new_passwd:
            raise UserError(_("Setting empty passwords is not allowed for security reasons!"))

        if not re.match(pattern, new_passwd):
            raise UserError(_("密码至少包含8位字符，且必须包括数字、大小写字母和特殊字符中的至少三种!"))

        return super()._change_password(new_passwd)

    # def _check_trusted_ip(self, env):  # 可信IP
    #     pass
    def _check_credentials(self, password, user_agent_env):
        if self.login != 'admin':
            if not re.match(pattern, password) and not user_agent_env.get('change_password', False):
                raise UserError(_("检测到弱密码，终止登录行为!"))
        return super()._check_credentials(password, user_agent_env)
